" 定义快捷键的前缀，即<Leader>
let mapleader=";"
" 定义快捷键到行首和行尾
nmap lb 0
nmap le $
" 设置快捷键将选中文本块复制至系统剪贴板
vnoremap <Leader>y "+y
" 设置快捷键将系统剪贴板内容粘贴至 vim
nmap <Leader>p "+p
" 定义快捷键关闭当前分割窗口
nmap <Leader>q :q<CR>
" 定义快捷键保存当前窗口内容
nmap <Leader>w :w<CR>
" 定义快捷键保存所有窗口内容并退出 vim
nmap <Leader>WQ :wa<CR>:q<CR>
" 不做任何保存，直接退出 vim
nmap <Leader>Q :qa!<CR>
" 依次遍历子窗口
nnoremap nw <C-W><C-W>
" 定义快捷键在结对符之间跳转，助记pair
nmap <Leader>pa %
" 定义快捷键分割窗口
nmap <Leader>sp :split<CR>
nmap <Leader>sv :vsplit<CR>
" 定义上个缓冲快捷键
nmap <Leader>gt <C-t>
nmap <Leader>sv :vsplit<CR>
" vim 自身命令行模式智能补全
set wildmenu
map <S-H> gT
map <S-L> gt

" cmap tabnew tabnew<CR>:NERDTree<CR>
" command Tabnew tabnew :NERDTree
" command -bar Tabnew tabnew | NERDTree



" 配置文件.vimrc更改后自动重新载入使设置生效
autocmd! bufwritepost .vimrc source $VIM/.vimrc

" 设置重新载入.vimrc快捷键
map <silent> <leader>ss :source $VIM/_vimrc<cr>

" 设置快速编辑.vimrc快捷键
map <silent> <leader>ee :e $VIM/_vimrc<cr>

" =============================================================================
"                          << 进行版权声明的设置 >>
" =============================================================================
map <F4> :call TitleDet()<cr>'s
function AddTitle()
    call append(2,"/*")
    call append(3," * This is a blog")
    call append(4," *")
    call append(5," * (c) 吴文虎 <815740330@qq.com>")
    call append(6," *")
    "call append(7," * Filename: ".expand("%:t"))
    call append(7," * Last modified: ".strftime("%Y-%m-%d %H:%M"))
    call append(8," */")
    call append(9,"")
    echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf

" -----------------------------------------------------------------------------
"  < 更新最近修改时间和文件名 >
" -----------------------------------------------------------------------------
function UpdateTitle()
    normal m'
    execute '/* *Last modified:/s@:.*$@\=strftime(": %Y-%m-%d %H:%M")@'
    normal ''
"    normal mk
"    execute '/* *Filename:/s@:.*$@\=": ".expand("%:t")@'
"    execute "noh"
"    normal 'k
    echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction

" -----------------------------------------------------------------------------
"  < 判断前10行代码里面，是否有Last modified这个单词 >
"  < 如果没有的话，代表没有添加过作者信息，需要新添加 >
"  < 如果有的话，那么只需要更新即可 >
" -----------------------------------------------------------------------------
function TitleDet()
    let n=2
    "默认为添加
    while n < 10 
        let line = getline(n)
        if line =~ '^\s\*\s*\S*Last\smodified:\S*.*$'
            call UpdateTitle()
            return
        endif
        let n = n + 1
    endwhile
    call AddTitle()
endfunction



" =============================================================================
"        << 判断操作系统是 Windows 还是 Linux 和判断是终端还是 Gvim >>
" =============================================================================

" -----------------------------------------------------------------------------
"  < 判断操作系统是否是 Windows 还是 Linux >
" -----------------------------------------------------------------------------
let g:iswindows = 0
let g:islinux = 0
if(has("win32") || has("win64") || has("win95") || has("win16"))
	let g:iswindows = 1
else
	let g:islinux = 1
endif

" -----------------------------------------------------------------------------
"  < 判断是终端还是 Gvim >
" -----------------------------------------------------------------------------
if has("gui_running")
	let g:isGUI = 1
else
	let g:isGUI = 0
endif


" =============================================================================
"                          << 以下为软件默认配置 >>
" =============================================================================

" -----------------------------------------------------------------------------
"  < Windows Gvim 默认配置> 做了一点修改
" -----------------------------------------------------------------------------
if (g:iswindows && g:isGUI)
    source $VIMRUNTIME/vimrc_example.vim
    source $VIMRUNTIME/mswin.vim
    behave mswin
    set diffexpr=MyDiff()
 
    function MyDiff()
        let opt = '-a --binary '
        if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
        if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
        let arg1 = v:fname_in
        if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
        let arg2 = v:fname_new
        if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
        let arg3 = v:fname_out
        if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
        let eq = ''
        if $VIMRUNTIME =~ ' '
            if &sh =~ '\<cmd'
                let cmd = '""' . $VIMRUNTIME . '\diff"'
                let eq = '"'
            else
                let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
            endif
        else
            let cmd = $VIMRUNTIME . '\diff'
        endif
        silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
    endfunction
endif

" -----------------------------------------------------------------------------
"  < Linux Gvim/Vim 默认配置> 做了一点修改
" -----------------------------------------------------------------------------
if g:islinux
	set hlsearch        "高亮搜索
	set incsearch       "在输入要搜索的文字时，实时匹配

	" Uncomment the following to have Vim jump to the last position when
	" reopening a file
	if has("autocmd")
		au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
	endif

	if g:isGUI
		" Source a global configuration file if available
		if filereadable("/etc/vim/gvimrc.local")
			source /etc/vim/gvimrc.local
		endif
	else
		" This line should not be removed as it ensures that various options are
		" properly set to work with the Vim-related packages available in Debian.
		runtime! debian.vim

		" Vim5 and later versions support syntax highlighting. Uncommenting the next
		" line enables syntax highlighting by default.
		if has("syntax")
			syntax on
		endif

		set mouse=a                    " 在任何模式下启用鼠标
		set t_Co=256                   " 在终端启用256色
		set backspace=2                " 设置退格键可用

		" Source a global configuration file if available
		if filereadable("/etc/vim/vimrc.local")
			source /etc/vim/vimrc.local
		endif
	endif
endif


" =============================================================================
"                          << 以下为用户自定义配置 >>
" =============================================================================

" -----------------------------------------------------------------------------
"  < Vundle 插件管理工具配置 >
" -----------------------------------------------------------------------------
" 用于更方便的管理vim插件，具体用法参考 :h vundle 帮助
" Vundle工具安装方法为在终端输入如下命令
" git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
" 如果想在 windows 安装就必需先安装 "git for window"，可查阅网上资料

set nocompatible                                      "禁用 Vi 兼容模式
filetype off                                          "禁用文件类型侦测

if g:islinux
	set rtp+=~/.vim/bundle/vundle/
	call vundle#rc()
else
	set rtp+=$VIM/vimfiles/bundle/vundle/
	call vundle#rc('$VIM/vimfiles/bundle/')
endif

" 使用Vundle来管理插件，这个必须要有。
Bundle 'gmarik/vundle'

" 以下为要安装或更新的插件，不同仓库都有（具体书写规范请参考帮助）
" 文件树
Bundle 'scrooloose/nerdtree'
" html\补全
Bundle 'mattn/emmet-vim'
Bundle 'othree/xml.vim'
Bundle 'Shougo/neocomplcache.vim'
" 括号补全
Bundle 'jiangmiao/auto-pairs'
" 状态栏\对齐线
Bundle 'Lokaltog/vim-powerline'
Bundle 'Yggdroot/indentLine'

Bundle 'scrooloose/nerdcommenter'
Bundle 'wesleyche/SrcExpl'
Bundle 'tpope/vim-surround'
Bundle 'cSyntaxAfter'
" 高效地浏览源码 
Bundle 'taglist.vim'
Bundle 'majutsushi/tagbar'

Bundle 'scrooloose/syntastic'
Bundle 'tpope/vim-repeat'
" 主题
Bundle 'solarized'
" 貌似没设么用
" Bundle 'languagetool-org/languagetool'
" 缓冲区
Bundle 'jlanzarotta/bufexplorer'
" 中文帮助
Bundle 'asins/vimcdoc'
Bundle 'bling/vim-bufferline'

" -----------------------------------------------------------------------------
"  < 编码配置 >
" -----------------------------------------------------------------------------
" 注：使用utf-8格式后，软件与程序源码、文件路径不能有中文，否则报错
set encoding=utf-8                                    "设置gvim内部编码，默认不更改
" set termencoding=utf-8                                "Vim 在与屏幕/键盘交互时使用的编码(取决于实际的终端的设定)
set fileencoding=utf-8                                "设置当前文件编码，可以更改，如：gbk（同cp936）
set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1     "设置支持打开的文件的编码
set helplang=cn                                       "设置中文帮助,下载地址：http://vimcdoc.sourceforge.net/,doc子目录的所有文件复制到$VIM/doc/,执行:helptags $VIM/doc 
" 文件格式，默认 ffs=dos,unix
set fileformat=unix                                   "设置新（当前）文件的<EOL>格式，可以更改，如：dos（windows系统常用）
set fileformats=unix,dos,mac                          "给出文件的<EOL>格式类型

if (g:iswindows && g:isGUI)
	"解决菜单乱码
	source $VIMRUNTIME/delmenu.vim
	source $VIMRUNTIME/menu.vim

	"解决consle输出乱码
	language messages zh_CN.utf-8
endif

" -----------------------------------------------------------------------------
"  < 编写文件时的配置 >
" -----------------------------------------------------------------------------
filetype on                                           "启用文件类型侦测
filetype plugin on                                    "针对不同的文件类型加载对应的插件
filetype plugin indent on                             "启用缩进
set smartindent                                       "启用智能对齐方式
set expandtab                                         "将Tab键转换为空格
set tabstop=4                                         "设置Tab键的宽度，可以更改，如：宽度为2
set shiftwidth=4                                      "换行时自动缩进宽度，可更改（宽度同tabstop）
set smarttab                                          "指定按一次backspace就删除shiftwidth宽度
set foldenable                                        "启用折叠
set foldmethod=indent                                 "indent 折叠方式
set gcr=a:block-blinkon0                              "光标不闪烁
" set foldmethod=marker                               "marker 折叠方式

" 常规模式下用空格键来开关光标行所在折叠（注：zR 展开所有折叠，zM 关闭所有折叠）
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>

" 当文件在外部被修改，自动更新该文件
set autoread

" 常规模式下输入 cS 清除行尾空格
nmap cS :%s/\s\+$//g<CR>:noh<CR>

" 常规模式下输入 cM 清除行尾 ^M 符号
nmap cM :%s/\r$//g<CR>:noh<CR>

" switch buffers with Tab
map <C-Tab> :bn<CR>
map <S-Tab> :bp<CR>

set ignorecase                                        "搜索模式里忽略大小写
set smartcase                                         "如果搜索模式包含大写字符，不使用 'ignorecase' 选项，只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用
" set noincsearch                                       "在输入要搜索的文字时，取消实时匹配

" Ctrl + K 插入模式下光标向上移动
imap <c-k> <Up>

" Ctrl + J 插入模式下光标向下移动
imap <c-j> <Down>

" Ctrl + H 插入模式下光标向左移动
imap <c-h> <Left>

" Ctrl + L 插入模式下光标向右移动
imap <c-l> <Right>

" 启用每行超过80列的字符提示（字体变蓝并加下划线），不启用就注释掉
au BufWinEnter * let w:m2=matchadd('Underlined', '\%>' . 80 . 'v.\+', -1)

" -----------------------------------------------------------------------------
"  < 界面配置 >
" -----------------------------------------------------------------------------
set number                                            "显示行号
set laststatus=2                                      "启用状态栏信息
set cmdheight=1                                       "设置命令行的高度为2，默认为1
set cursorline                                        "突出显示当前行
" set guifont=YaHei_Consolas_Hybrid:h10                 "设置字体:字号（字体名称空格用下划线代替）
" set guifont=Consolas:h10
set nowrap                                            "设置不自动换行
set shortmess=atI                                     "去掉欢迎界面

" 设置 gVim 窗口初始位置及大小
if g:isGUI
	" au GUIEnter * simalt ~x                           "窗口启动时自动最大化
	winpos 100 10                                     "指定窗口出现的位置，坐标原点在屏幕左上角
	set lines=38 columns=120                          "指定窗口大小，lines为高度，columns为宽度
endif

" 设置代码配色方案
if g:isGUI
	" colorscheme Tomorrow-Night-Eighties               "Gvim配色方案
    colorscheme solarized
else
	colorscheme Tomorrow-Night-Eighties               "终端配色方案
endif

" 显示/隐藏菜单栏、工具栏、滚动条，可用 Ctrl + F11 切换
if g:isGUI
	set guioptions-=m
	set guioptions-=T
	set guioptions-=r
	set guioptions-=L
	nmap <silent> <c-F11> :if &guioptions =~# 'm' <Bar>
				\set guioptions-=m <Bar>
				\set guioptions-=T <Bar>
				\set guioptions-=r <Bar>
				\set guioptions-=L <Bar>
				\else <Bar>
				\set guioptions+=m <Bar>
				\set guioptions+=T <Bar>
				\set guioptions+=r <Bar>
				\set guioptions+=L <Bar>
				\endif<CR>
endif

" -----------------------------------------------------------------------------
"  < 在浏览器中预览 Html 或 PHP 文件 >
" -----------------------------------------------------------------------------
" 修改前请先通读此模块，明白了再改以避免错误

" F5 加浏览器名称缩写调用浏览器预览，启用前先确定有安装相应浏览器，并在下面的配置好其安装目录
if g:iswindows
	"以下为只支持Windows系统的浏览器

	" 调用系统IE浏览器预览，如果已卸载可将其注释
	nmap <F5>ie :call ViewInBrowser("ie")<cr>
	imap <F5>ie <ESC>:call ViewInBrowser("ie")<cr>

	" 调用IETester(IE测试工具)预览，如果有安装可取消注释
	" nmap <F5>ie6 :call ViewInBrowser("ie6")<cr>
	" imap <F5>ie6 <ESC>:call ViewInBrowser("ie6")<cr>
	" nmap <F5>ie7 :call ViewInBrowser("ie7")<cr>
	" imap <F5>ie7 <ESC>:call ViewInBrowser("ie7")<cr>
	" nmap <F5>ie8 :call ViewInBrowser("ie8")<cr>
	" imap <F5>ie8 <ESC>:call ViewInBrowser("ie8")<cr>
	" nmap <F5>ie9 :call ViewInBrowser("ie9")<cr>
	" imap <F5>ie9 <ESC>:call ViewInBrowser("ie9")<cr>
	" nmap <F5>ie10 :call ViewInBrowser("ie10")<cr>
	" imap <F5>ie10 <ESC>:call ViewInBrowser("ie10")<cr>
	" nmap <F5>iea :call ViewInBrowser("iea")<cr>
	" imap <F5>iea <ESC>:call ViewInBrowser("iea")<cr>
elseif g:islinux
	"以下为只支持Linux系统的浏览器
	"暂未配置，待有时间再弄了
endif

"以下为支持Windows与Linux系统的浏览器

" 调用Firefox浏览器预览，如果有安装可取消注释
nmap <F5>ff :call ViewInBrowser("ff")<cr>
imap <F5>ff <ESC>:call ViewInBrowser("ff")<cr>

" 调用Maxthon(遨游)浏览器预览，如果有安装可取消注释
" nmap <F5>ay :call ViewInBrowser("ay")<cr>
" imap <F5>ay <ESC>:call ViewInBrowser("ay")<cr>

" 调用Opera浏览器预览，如果有安装可取消注释
" nmap <F5>op :call ViewInBrowser("op")<cr>
" imap <F5>op <ESC>:call ViewInBrowser("op")<cr>

" 调用Chrome浏览器预览，如果有安装可取消注释
nmap <F5>cr :call ViewInBrowser("ch")<cr>
imap <F5>cr <ESC>:call ViewInBrowser("ch")<cr>

" 浏览器调用函数
function! ViewInBrowser(name)
	if expand("%:e") == "php" || expand("%:e") == "html"
		exe ":update"
		if g:iswindows
			"获取要预览的文件路径，并将路径中的'\'替换为'/'，同时将路径文字的编码转换为gbk（同cp936）
			let file = iconv(substitute(expand("%:p"), '\', '/', "g"), "utf-8", "gbk")

			"浏览器路径设置，路径中使用'/'斜杠，更改路径请更改双引号里的内容
			"下面只启用了系统IE浏览器，如需启用其它的可将其取消注释（得先安装，并配置好安装路径），也可按需增减
			let SystemIE = "C:/progra~1/intern~1/iexplore.exe"  "系统自带IE目录
			" let IETester = "F:/IETester/IETester.exe"           "IETester程序目录（可按实际更改）
			let Chrome = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"                 "Chrome程序目录（可按实际更改）
			let Firefox = "D:/MySoftware/Firefox/Firefox.exe"              "Firefox程序目录（可按实际更改）
			" let Opera = "F:/Opera/opera.exe"                    "Opera程序目录（可按实际更改）
			" let Maxthon = "C:/Progra~2/Maxthon/Bin/Maxthon.exe" "Maxthon程序目录（可按实际更改）

			"本地虚拟服务器设置，我测试的是phpStudy2014，可根据自己的修改，更改路径请更改双引号里的内容
			let htdocs ="D:/php/"                  "虚拟服务器地址或目录（可按实际更改）
			let url = "www.wwh.com"                               "虚拟服务器网址（可按实际更改）
		elseif g:islinux
			"暂时还没有配置，有时间再弄了。
		endif

		"浏览器调用缩写，可根据实际增减，注意，上面浏览器路径中没有定义过的变量（等号右边为变量）不能出现在下面哟（可将其注释或删除）
		let l:browsers = {}                             "定义缩写字典变量，此行不能删除或注释
		let l:browsers["ch"] = Chrome                   "Chrome浏览器缩写
		let l:browsers["ff"] = Firefox                  "Firefox浏览器缩写
		" let l:browsers["op"] = Opera                    "Opera浏览器缩写
		" let l:browsers["ay"] = Maxthon                  "遨游浏览器缩写
		let l:browsers["ie"] = SystemIE                 "系统IE浏览器缩写
		" let l:browsers["ie6"] = IETester."-ie6"         "调用IETESTER工具以IE6预览缩写（变量加参数）
		" let l:browsers["ie7"] = IETester."-ie7"         "调用IETESTER工具以IE7预览缩写（变量加参数）
		" let l:browsers["ie8"] = IETester."-ie8"         "调用IETESTER工具以IE8预览缩写（变量加参数）
		" let l:browsers["ie9"] = IETester."-ie9"         "调用IETESTER工具以IE9预览缩写（变量加参数）
		" let l:browsers["ie10"] = IETester."-ie10"       "调用IETESTER工具以IE10预览缩写（变量加参数）
		" let l:browsers["iea"] = IETester."-al"          "调用IETESTER工具以支持的所有IE版本预览缩写（变量加参数）

		if stridx(file, htdocs) == -1   "文件不在本地虚拟服务器目录，则直接预览（但不能解析PHP文件）
			exec ":silent !start ". l:browsers[a:name] ." file://" . file
		else    "文件在本地虚拟服务器目录，则调用本地虚拟服务器解析预览（先启动本地虚拟服务器）
			let file = substitute(file, htdocs, "http://".url."/", "g")    "转换文件路径为虚拟服务器网址路径
			exec ":silent !start ". l:browsers[a:name] file
		endif
	else
		echohl WarningMsg | echo " please choose the correct source file"
	endif
endfunction

" -----------------------------------------------------------------------------
"  < 其它配置 >
" -----------------------------------------------------------------------------
set writebackup                             "保存文件前建立备份，保存成功后删除该备份
set nobackup                                "设置无备份文件
" set noswapfile                              "设置无临时文件
" set vb t_vb=                                "关闭提示音


" =============================================================================
"                          << 以下为常用插件配置 >>
" =============================================================================

" -----------------------------------------------------------------------------
"  < a.vim 插件配置 >
" -----------------------------------------------------------------------------
" 用于切换C/C++头文件
" :A     ---切换头文件并独占整个窗口
" :AV    ---切换头文件并垂直分割窗口
" :AS    ---切换头文件并水平分割窗口


" -----------------------------------------------------------------------------
"  < Align 插件配置 >
" -----------------------------------------------------------------------------
" 一个对齐的插件，用来——排版与对齐代码，功能强大，不过用到的机会不多

" -----------------------------------------------------------------------------
"  < auto-pairs 插件配置 >
" -----------------------------------------------------------------------------
" 用于括号与引号自动补全，不过会与函数原型提示插件echofunc冲突
" 所以我就没有加入echofunc插件

" -----------------------------------------------------------------------------
"  < BufExplorer 插件配置 >
" -----------------------------------------------------------------------------
" 快速轻松的在缓存中切换（相当于另一种多个文件间的切换方式）
" <Leader>be 在当前窗口显示缓存列表并打开选定文件
" <Leader>bs 水平分割窗口显示缓存列表，并在缓存列表窗口中打开选定文件
" <Leader>bv 垂直分割窗口显示缓存列表，并在缓存列表窗口中打开选定文件
" let g:bufExplorerDefaultHelp=0  " Do not show default help.
" let g:bufExplorerShowRelativePath=1 " Show relative paths.
" let g:bufExplorerSortBy='mru'     " Sort by most recently used.
" let g:bufExplorerSplitRight=0        " Split left.
" let g:bufExplorerSplitVertical=1     " Split vertically.
" let g:bufExplorerSplitVertSize = 30 " Split width
" let g:bufExplorerUseCurrentWindow=1 " Open in new window.
" autocmd BufWinEnter \[Buf\ List\] setl nonumber

" -----------------------------------------------------------------------------
"  < ccvext.vim 插件配置 >
" -----------------------------------------------------------------------------
" 用于对指定文件自动生成tags与cscope文件并连接
" 如果是Windows系统, 则生成的文件在源文件所在盘符根目录的.symbs目录下(如: X:\.symbs\)
" 如果是Linux系统, 则生成的文件在~/.symbs/目录下
" 具体用法可参考www.vim.org中此插件的说明
" <Leader>sy 自动生成tags与cscope文件并连接
" <Leader>sc 连接已存在的tags与cscope文件

" -----------------------------------------------------------------------------
"  < cSyntaxAfter 插件配置 >
" -----------------------------------------------------------------------------
" 高亮括号与运算符等
au! BufRead,BufNewFile,BufEnter *.{c,cpp,h,java,javascript} call CSyntaxAfter()

" -----------------------------------------------------------------------------
"  < ctrlp.vim 插件配置 >
" -----------------------------------------------------------------------------
" 一个全路径模糊文件，缓冲区，最近最多使用，... 检索插件；详细帮助见 :h ctrlp
" 常规模式下输入：Ctrl + p 调用插件

" -----------------------------------------------------------------------------
"  < emmet-vim（前身为Zen coding） 插件配置 >
" -----------------------------------------------------------------------------
" HTML/CSS代码快速编写神器，详细帮助见 :h emmet.txt

" -----------------------------------------------------------------------------
"  < indentLine 插件配置 >
" -----------------------------------------------------------------------------
" 用于显示对齐线，与 indent_guides 在显示方式上不同，根据自己喜好选择了
" 在终端上会有屏幕刷新的问题，这个问题能解决有更好了
" 开启/关闭对齐线
nmap <leader>il :IndentLinesToggle<CR>

" 设置Gvim的对齐线样式
if g:isGUI
	let g:indentLine_char = "┊"
	let g:indentLine_first_char = "┊"
endif

" 设置终端对齐线颜色，如果不喜欢可以将其注释掉采用默认颜色
let g:indentLine_color_term = 239

" 设置 GUI 对齐线颜色，如果不喜欢可以将其注释掉采用默认颜色
" let g:indentLine_color_gui = '#A4E57E'

" -----------------------------------------------------------------------------
"  < vim-javacompleteex（也就是 javacomplete 增强版）插件配置 >
" -----------------------------------------------------------------------------
" java 补全插件

" -----------------------------------------------------------------------------
"  < Mark--Karkat（也就是 Mark） 插件配置 >
" -----------------------------------------------------------------------------
" 给不同的单词高亮，表明不同的变量时很有用，详细帮助见 :h mark.txt

" " -----------------------------------------------------------------------------
" "  < MiniBufExplorer 插件配置 >
" " -----------------------------------------------------------------------------
" " 快速浏览和操作Buffer
" " 主要用于同时打开多个文件并相与切换

" " let g:miniBufExplMapWindowNavArrows = 1     "用Ctrl加方向键切换到上下左右的窗口中去
" let g:miniBufExplMapWindowNavVim = 1        "用<C-k,j,h,l>切换到上下左右的窗口中去
" let g:miniBufExplMapCTabSwitchBufs = 1      "功能增强（不过好像只有在Windows中才有用）
" "                                            <C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开
" "                                            <C-S-Tab> 向后循环切换到每个buffer上,并在当前窗口打开

" 在不使用 MiniBufExplorer 插件时也可用<C-k,j,h,l>切换到上下左右的窗口中去
noremap <c-k> <c-w>k
noremap <c-j> <c-w>j
noremap <c-h> <c-w>h
noremap <c-l> <c-w>l

" -----------------------------------------------------------------------------
"  < neocomplcache 插件配置 >
" -----------------------------------------------------------------------------
" 关键字补全、文件路径补全、tag补全等等，各种，非常好用，速度超快。
let g:neocomplcache_enable_at_startup = 1     "vim 启动时启用插件
" let g:neocomplcache_disable_auto_complete = 1 "不自动弹出补全列表
" 在弹出补全列表后用 <c-p> 或 <c-n> 进行上下选择效果比较好

" -----------------------------------------------------------------------------
"  < nerdcommenter 插件配置 >
" -----------------------------------------------------------------------------
" 我主要用于C/C++代码注释(其它的也行)
" 以下为插件默认快捷键，其中的说明是以C/C++为例的，其它语言类似
" <Leader>ci 以每行一个 /* */ 注释选中行(选中区域所在行)，再输入则取消注释
" <Leader>cm 以一个 /* */ 注释选中行(选中区域所在行)，再输入则称重复注释
" <Leader>cc 以每行一个 /* */ 注释选中行或区域，再输入则称重复注释
" <Leader>cu 取消选中区域(行)的注释，选中区域(行)内至少有一个 /* */
" <Leader>ca 在/*...*/与//这两种注释方式中切换（其它语言可能不一样了）
" <Leader>cA 行尾注释
let NERDSpaceDelims = 1                     "在左注释符之后，右注释符之前留有空格

" -----------------------------------------------------------------------------
"  < nerdtree 插件配置 >
" -----------------------------------------------------------------------------
" 有目录村结构的文件浏览插件

" 常规模式下输入 F2 调用插件
nmap <F2> :NERDTreeToggle<CR>

" -----------------------------------------------------------------------------
"  < omnicppcomplete 插件配置 >
" -----------------------------------------------------------------------------
" 用于C/C++代码补全，这种补全主要针对命名空间、类、结构、共同体等进行补全，详细
" 说明可以参考帮助或网络教程等
" 使用前先执行如下 ctags 命令（本配置中可以直接使用 ccvext 插件来执行以下命令）
" ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
" 我使用上面的参数生成标签后，对函数使用跳转时会出现多个选择
" 所以我就将--c++-kinds=+p参数给去掉了，如果大侠有什么其它解决方法希望不要保留呀
set completeopt=menu                        "关闭预览窗口

" -----------------------------------------------------------------------------
"  < powerline 插件配置 >
" -----------------------------------------------------------------------------
" 状态栏插件，更好的状态栏效果

" -----------------------------------------------------------------------------
"  < repeat 插件配置 >
" -----------------------------------------------------------------------------
" 主要用"."命令来重复上次插件使用的命令

" -----------------------------------------------------------------------------
"  < snipMate 插件配置 >
" -----------------------------------------------------------------------------
" 用于各种代码补全，这种补全是一种对代码中的词与代码块的缩写补全，详细用法可以参
" 考使用说明或网络教程等。不过有时候也会与 supertab 插件在补全时产生冲突，如果大
" 侠有什么其它解决方法希望不要保留呀

" -----------------------------------------------------------------------------
"  < SrcExpl 插件配置 >
" -----------------------------------------------------------------------------
" 增强源代码浏览，其功能就像Windows中的"Source Insight"
nmap <F3> :SrcExplToggle<CR>                "打开/闭浏览窗口

" -----------------------------------------------------------------------------
"  < std_c 插件配置 >
" -----------------------------------------------------------------------------
" 用于增强C语法高亮

" 启用 // 注视风格
let c_cpp_comments = 0

" -----------------------------------------------------------------------------
"  < surround 插件配置 >
" -----------------------------------------------------------------------------
" 快速给单词/句子两边增加符号（包括html标签），缺点是不能用"."来重复命令
" 不过 repeat 插件可以解决这个问题，详细帮助见 :h surround.txt

" -----------------------------------------------------------------------------
"  < Syntastic 插件配置 >
" -----------------------------------------------------------------------------
" 用于保存文件时查检语法

" -----------------------------------------------------------------------------
"  < Tagbar 插件配置 >
" -----------------------------------------------------------------------------
" 相对 TagList 能更好的支持面向对象

" 常规模式下输入 tb 调用插件，如果有打开 TagList 窗口则先将其关闭
nmap tb :TlistClose<CR>:TagbarToggle<CR>

let g:tagbar_width=30                       "设置窗口宽度
" let g:tagbar_left=1                         "在左侧窗口中显示

" -----------------------------------------------------------------------------
"  < TagList 插件配置 >
" -----------------------------------------------------------------------------
" 高效地浏览源码, 其功能就像vc中的workpace
" 那里面列出了当前文件中的所有宏,全局变量, 函数名等

" 常规模式下输入 tl 调用插件，如果有打开 Tagbar 窗口则先将其关闭
nmap tl :TagbarClose<CR>:Tlist<CR>

let Tlist_Show_One_File=1                   "只显示当前文件的tags
" let Tlist_Enable_Fold_Column=0              "使taglist插件不显示左边的折叠行
let Tlist_Exit_OnlyWindow=1                 "如果Taglist窗口是最后一个窗口则退出Vim
let Tlist_File_Fold_Auto_Close=1            "自动折叠
let Tlist_WinWidth=30                       "设置窗口宽度
let Tlist_Use_Right_Window=1                "在右侧窗口中显示

" -----------------------------------------------------------------------------
"  < txtbrowser 插件配置 >
" -----------------------------------------------------------------------------
" 用于文本文件生成标签与与语法高亮（调用TagList插件生成标签，如果可以）
au BufRead,BufNewFile *.txt setlocal ft=txt

" -----------------------------------------------------------------------------
"  < ZoomWin 插件配置 >
" -----------------------------------------------------------------------------
" 用于分割窗口的最大化与还原
" 常规模式下按快捷键 <c-w>o 在最大化与还原间切换

" ===========================================================================
"                          << 以下为常用工具配置 >>
" =============================================================================

" -----------------------------------------------------------------------------
"  < cscope 工具配置 >
" -----------------------------------------------------------------------------
" 用Cscope自己的话说 - "你可以把它当做是超过频的ctags"
if has("cscope")
	"设定可以使用 quickfix 窗口来查看 cscope 结果
	set cscopequickfix=s-,c-,d-,i-,t-,e-
	"使支持用 Ctrl+]  和 Ctrl+t 快捷键在代码间跳转
	set cscopetag
	"如果你想反向搜索顺序设置为1
	set csto=0
	"在当前目录中添加任何数据库
	if filereadable("cscope.out")
		cs add cscope.out
		"否则添加数据库环境中所指出的
	elseif $CSCOPE_DB != ""
		cs add $CSCOPE_DB
	endif
	set cscopeverbose
	"快捷键设置
	nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
	nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>
	nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>
	nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>
	nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>
	nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
	nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
	nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
endif

" -----------------------------------------------------------------------------
"  < ctags 工具配置 >
" -----------------------------------------------------------------------------
" 对浏览代码非常的方便,可以在函数,变量之间跳转等
" 向上级目录递归查找tags文件（好像只有在Windows下才有用）
set tags=tags;
set autochdir

" -----------------------------------------------------------------------------
"  < gvimfullscreen 工具配置 > 请确保已安装了工具
" -----------------------------------------------------------------------------
" 用于 Windows Gvim 全屏窗口，可用 F11 切换
" 全屏后再隐藏菜单栏、工具栏、滚动条效果更好
if (g:iswindows && g:isGUI)
	nmap <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR>
endif

" -----------------------------------------------------------------------------
"  < vimtweak 工具配置 > 请确保以已装了工具
" -----------------------------------------------------------------------------
" 这里只用于窗口透明与置顶
" 常规模式下 Ctrl + Up（上方向键） 增加不透明度，Ctrl + Down（下方向键） 减少不透明度，<Leader>t 窗口置顶与否切换
if (g:iswindows && g:isGUI)
	let g:Current_Alpha = 255
	let g:Top_Most = 0
	func! Alpha_add()
		let g:Current_Alpha = g:Current_Alpha + 10
		if g:Current_Alpha > 255
			let g:Current_Alpha = 255
		endif
		call libcallnr("vimtweak.dll","SetAlpha",g:Current_Alpha)
	endfunc
	func! Alpha_sub()
		let g:Current_Alpha = g:Current_Alpha - 10
		if g:Current_Alpha < 155
			let g:Current_Alpha = 155
		endif
		call libcallnr("vimtweak.dll","SetAlpha",g:Current_Alpha)
	endfunc
	func! Top_window()
		if  g:Top_Most == 0
			call libcallnr("vimtweak.dll","EnableTopMost",1)
			let g:Top_Most = 1
		else
			call libcallnr("vimtweak.dll","EnableTopMost",0)
			let g:Top_Most = 0
		endif
	endfunc

	"快捷键设置
	nmap <c-up> :call Alpha_add()<CR>
	nmap <c-down> :call Alpha_sub()<CR>
	nmap <leader>t :call Top_window()<CR>
endif

" =============================================================================
"                          << 以下为常用自动命令配置 >>
" =============================================================================

" 自动切换目录为当前编辑文件所在目录
au BufRead,BufNewFile,BufEnter * cd %:p:h

" =============================================================================
"                     << windows 下解决 Quickfix 乱码问题 >>
" =============================================================================
" windows 默认编码为 cp936，而 Gvim(Vim) 内部编码为 utf-8，所以常常输出为乱码
" 以下代码可以将编码为 cp936 的输出信息转换为 utf-8 编码，以解决输出乱码问题
" 但好像只对输出信息全部为中文才有满意的效果，如果输出信息是中英混合的，那可能
" 不成功，会造成其中一种语言乱码，输出信息全部为英文的好像不会乱码
" 如果输出信息为乱码的可以试一下下面的代码，如果不行就还是给它注释掉

" if g:iswindows
"     function QfMakeConv()
"         let qflist = getqflist()
"         for i in qflist
"            let i.text = iconv(i.text, "cp936", "utf-8")
"         endfor
"         call setqflist(qflist)
"      endfunction
"      au QuickfixCmdPost make call QfMakeConv()
" endif

" =============================================================================
"                          << 其它 >>
" =============================================================================
" 注：上面配置中的"<Leader>"在本软件中设置为"\"键（引号里的反斜杠），如<Leader>t
" 指在常规模式下按"\"键加"t"键，这里不是同时按，而是先按"\"键后按"t"键，间隔在一
" 秒内，而<Leader>cs是先按"\"键再按"c"又再按"s"键；如要修改"<leader>"键，可以把
" 下面的设置取消注释，并修改双引号中的键为你想要的，如修改为逗号键。

"
" PHP 注释
source D:/MySoftware/Vim/vimfiles/ftplugin/php-doc.vim 
inoremap <C-P> <ESC>:call PhpDocSingle()<CR>i 
nnoremap <C-P> :call PhpDocSingle()<CR> 
vnoremap <C-P> :call PhpDocRange()<CR> 

" 官方自带补全工具
autocmd FileType php set omnifunc=phpcomplete#CompletePHP

" 实现标记%
source $VIMRUNTIME/macros/matchit.vim

" 设置 PHP 手册文档
set runtimepath+=D:/MySoftware/Vim/vimfiles/phpmuanul/vim-php-manual
autocmd BufNewFile,Bufread *.ros,*.inc,*.php set keywordprg="help"


"只有在是PHP文件时，才启用PHP补全
"au FileType php call PHPFuncList()
"function PHPFuncList()
"set dictionary-=/etc/vim/php_funclist.txt dictionary+=/etc/vim/php_funclist.txt
"set complete-=k complete+=k
"endfunction

" 将你刚刚输入的那个单词变成大写  
inoremap <C-u> <esc>gUiwea
